package com.dyz.LeetCodeforSwordFingerOffer;

public class HammingWeight15 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        //做揭发操作
        //考虑对一个整数做减法。假设这个整数的第m位是它从右边数的第一个1，即m右边都是0，减一之后，m位变成0，右边都是1 。
        // 而如果此时对n和n-1做与操作，会让从m位开始都为0了。或者说，每做一次这样的操作，n都会去掉一个1，直到变成全0 。
        int count = 0;
        while(n!=0){
            count++;
            n = n&(n-1);
        }

        return count;
    }
}
